package demo09StackQueue;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:咭咭熊
 * Date:2021 - 11 - 02
 * Time:19:32
 */

import java.util.Stack;

/***
 * 括号匹配问题
 * 左括号入栈，遇到右括号(取出栈顶元素进行比较)出栈
 * （1）如果栈不为空，则左括号多；（[）
 *  (2)右括号多(])
  */

public class Test01 {
    //{[]}
    public boolean isVaild(String s){
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if(ch == '(' || ch == '['|| ch == '{'){
                //说明当前遍历到的字符是左括号
                stack.push(ch);
            }else{
                //1.判断当前的栈是否为空
                if(stack.empty()){
                    System.out.println("右括号多！");
                    return  false;//代表右括号多
                }
                //2.得到栈顶元素与当前的字符匹配，如果匹配则当前字符出栈
                char topch = stack.peek();
                if(topch == '{' && ch == '}' || topch == '[' && ch == ']' || topch == '(' && ch == ')'){
                    stack.pop();
                }else{
                    System.out.println("左右括号不匹配");
                    return  false;
                }
            }
        }
        if(!stack.empty()){
            System.out.println("左括号多");
            return  false;
        }
        return  true;
    }
}
